package type_conversion;

//类型转换
public class TypeConversion {
    public static void main(String[] args) {
            //小类型转大类型
            //1.将小类型的变量赋值给大类型的变量，编译器自动提升小类型的变量类型
            int a = 10;
            long b = 20L;
            b = a;//相当于long=int，小类型赋给大类型，int自动提升为long
            //a = b;错误使用，相当于int=long，需要强转

            //2.当小类型数据与大类型数据进行计算时，小类型自动提升为大类型
            long c = Integer.MAX_VALUE+1;//结果为-2147483648，相当于int+int，计算出的值仍然是int类型，所以会溢出，溢出的值赋给long
            long d =Integer.MAX_VALUE+1L;//结果为2147483648，相当于int+long，先将int提升为long再进行计算，所以不会溢出
            int n = 1;
            int m = 2;
            //m*1.0将int类型的m提升为double类型，n*(m*1.0)也会提升为double类型，所以计算结果为0.5
            System.out.println(n/(m*1.0));

            //大类型转换为小类型
            //进行强制转换时可能会造成精度丢失和数据溢出
            int a1 = 10;
            long b1 = Integer.MAX_VALUE+1L;
            a1 = (int) b1;
            System.out.println(a1);//输出结果为-2147483648，强转的过程中发生数据溢出
            int a2 = 1;
            double c1 = 3.7;
            a2 = (int) c1;
            System.out.println(a2);//输出结果为3，强制转换的过程中发生精度丢失
            boolean p = true;
            int num = 1;
            //毫不相关的数据类型之间无法进行类型转换
            //num = (int) p;
            //p = (boolean) num;

            //补充：4字节以下的数据类型保存
            // byte <-> int (short <-> int 与此类似)
            byte e =10;
            byte g =20;//未超过byte的范围，可以不进行强制转换
            byte h =(byte)140;//超过byte的最大范围127，需要进行强制转换
            byte k =10 + 20;//编译器自动识别是否在byte的范围之内
            byte s =(byte)(e + g);//在进行byte之间的运算时，编译器无法确定是否超出byte范围，所以不管是否超出范围，都需要进行强转
            System.out.println(h);//结果为-116
            System.out.println(k);//结果为30
            System.out.println(s);//结果为30

            //char <-> int
            char t ='a';
            int r = 10;
            r = t;//直接进行隐式转换
            t = (char)r;//进行强转
            System.out.println(t);//输出结果为a
            System.out.println(r);//输出结果为97，是‘a’的编码
            char y='哈';
            int w=y;
            System.out.println(w);//输出结果为21704，是汉字哈的编码
    }
}
